模型显示位置、放大/缩小比例操作 |
您所在的位置:网站首页 › live2d z轴 › 模型显示位置、放大/缩小比例操作 |
模型显示位置、放大/缩小比例操作
最終更新: 2022年12月8日 由于Live2D使用多边形进行绘制,所以它在绘制时与3DCG相同使用矩阵。本文说明如何在Cubism SDK范例程序中使用矩阵。它不包括矩阵本身的说明。 概述在Cubism SDK上计算矩阵时,使用CubismMatrix44或继承它的类。 CubismMatrix44包含一个4 * 4矩阵的数组。数组中元素的顺序基于OpenGL。 CubismMatrix44及其继承类不支持旋转、Z 轴移动或放大/缩小比例操作。 但是,如果在传递给渲染器的时候转变成GMatrix44,就可以通过第三方的矩阵计算工具库进行处理。 CubismMatrix44 获取矩阵的数组使用以下任意函数获取CubismMatrix44中矩阵的数组。 Native(C++)的CubismMatrix44::GetArray函数Web(TypeScript)的CubismMatrix44.getAray函数Java的CubismMatrix44.getAray函数CubismMatrix44::GetArray函数和CubismMatrix44.getAray函数用于获取要传递给渲染器的矩阵数组等。 csmFloat32* matrixArray = cubismMatrix44->GetArray(); let matrixArray = mubismmatrix44.getAray(); float[] matrixArray = CubismMatrix.getArray(); 设置矩阵的数组要使用外部生成的矩阵覆盖CubismMatrix44中的矩阵数组,请使用以下任意函数。 Native(C++)的CubismMatrix44::SetMatrix函数Web(TypeScript)的CubismMatrix44.setMatrix函数Java的CubismMatrix44.setMatrix函数 csmFloat32* matrixArray; cubismMatrix44->SetMatrix(matrixArray); let matrixArray: Float32Array; cubismMatrix44.setMatrix(matrixArray); CubismMatrix44 cubismMatrix44 = CubismMatrix.create(); float[] matrixArray = new float[16] for (int i = 0; i < 16; i++) { matrixArray[i] = 0.5f; } cubismMatrix44.setMatrix(matrixArray); 移动显示位置使用以下任意函数来平移显示位置。 Native(C++)的CubismMatrix44::Translate函数或CubismMatrix44::TranslateRelative函数Web(TypeScript)的CubismMatrix44.translate函数或CubismMatrix44.translateRelative函数Java的CubismMatrix44.translate函数或CubismMatrix44.translateRelative函数参数设置的所有座标均为屏幕坐标系。 CubismMatrix44::Translate函数和CubismMatrix44.translate函数用参数覆盖当前座标。CubismMatrix44::TranslateRelative函数和CubismMatrix44.translateRelative函数相对于当前座标平移参数的量。 cubismMatrix44->Translate(translateX, translateY); cubismMatrix44->TranslateRelative(translateX, translateY); cubismMatrix44.translate(translateX, translateY); cubismMatrix44.translateRelative(translateX, translateY); cubismMatrix44.translate(translateX, translateY); cubismMatrix44.translateRelative(translateX, translateY); 放大/缩小显示倍率使用以下任意函数来放大或缩小显示倍率。 Native(C++)的CubismMatrix44::Scale函数或CubismMatrix44::ScaleRelative函数Web(TypeScript)的CubismMatrix44.scale函数或CubismMatrix44.scaleRelative函数Java的CubismMatrix44.scale函数或CubismMatrix44.scaleRelative函数CubismMatrix44::Scale函数和CubismMatrix44.scale函数用一个参数覆盖当前的显示倍率。CubismMatrix44::ScaleRelative函数和CubismMatrix44.scaleRelative函数通过参数值相对设置当前显示倍率。 如果显示倍率设置为1,它将是模型的原始大小。 cubismMatrix44->Scale(scaleX, scaleY); cubismMatrix44->ScaleRelative(scaleX, scaleY); cubismMatrix44.scale(scaleX, scaleY); cubismMatrix44.scaleRelative(scaleX, scaleY); cubismMatrix44.scale(scaleX, scaleY); cubismMatrix.scaleRelative(scaleX, scaleY); 获取座标要获取通过矩阵变换的座标,使用以下任意函数。 Native(C++)的CubismMatrix44::TransformX函数或CubismMatrix44::TransformY函数Web(TypeScript)的CubismMatrix44.transformX函数或CubismMatrix44.transformY函数Java的CubismMatrix44.transformX函数或CubismMatrix44.transformY函数在从模型在局部坐标系中的顶点座标获取画面上的位置等时使用。 csmFloat32 positionX = cubismMatrix44->TransformX(localX); csmFloat32 positionY = cubismMatrix44->TransformY(localY); let positionX: number = cubismMatrix44.transformX(localX); let positionY: number = cubismMatrix44.transformY(localY); float positionX = cubismMatrix44.transformX(localX); float positionY = cubismMatrix44.transformY(localY);要获得由矩阵逆变换的座标,使用以下任意函数。 Native(C++)的CubismMatrix44::InvertTransformX函数或CubismMatrix44::InvertTransformY函数Web(TypeScript)的CubismMatrix44.invertTransformX函数或CubismMatrix44.invertTransformY函数Java的CubismMatrix44.invertTransformX函数或CubismMatrix44.invertTransformY函数用于从重叠检测等画面坐标系中输入的座标获取模型局部坐标系中的座标。 csmFloat32 localX = cubismMatrix44->InvertTransformX(inputPositionX); csmFloat32 localY = cubismMatrix44->InvertTransformY(inputPositionY); let localX: number = cubismMatrix44.invertTransformX(inputPositionX); let localY: number = cubismMatrix44.invertTransformY(inputPositionY); float localX = cubismMatrix44.invertTransformX(inputPositionX); float localY = cubismMatrix44.invertTransformY(inputPositionY); 矩阵之间的计算要进行矩阵之间的计算,使用以下任意函数。 Native(C++)的CubismMatrix44::Multiply函数或CubismMatrix44::MultiplyByMatrix函数Web(TypeScript)的CubismMatrix44.multiply函数或CubismMatrix44.multiplyByMatrix函数Java的CubismMatrix44.multiply函数或CubismMatrix44.multiplyByMatrix函数 CubismMatrix44* matrixA, matrixB; // 以下都是相同的处理。 CubismMatrix44::Multiply(matrixA->GetArray(), matrixB->GetArray(), matrixA->GetArray()); matrixA->MultiplyByMatrix(matrixB); let matrixA, matrixB: CubismMatrix44; // 以下都是相同的处理。 CubismMatrix44.multiply(matrixA->GetArray(), matrixB->GetArray(), matrixA->GetArray()); matrixA.multiplyByMatrix(matrixB); CubismMatrix44 matrixA = CubismMatrix44.create(); CubismMatrix44 matrixB = CubismMatrix44.create(); // 以下都是相同的处理 CubismMatrix44.multiply(matrixA.getArray(), matrixB.getArray(), matrixA.getArray()); matrixA.multiplyByMatrix(matrixB); CubismModelMatrix它是一个继承CubismMatrix44的类。目的是设置模型座标,显示位置可以从侧面或中心点设置,显示倍率可以通过高、宽操作。 Cubism SDK范例在画面全体显示Cubism模型的画布高度。 副本生成CubismModelMatrix在生成副本时,需要设置模型的画布大小。 CubismModel* cubismModel; CubismModelMatrix* cubismModelMatrix; cubismModelMatrix = new CubismModelMatrix(cubismModel->GetCanvasWidth(), cubismModel->GetCanvasHeight()); let cubismModel: CubismModel; let cubismModelMatrix: CubismModelMatrix; cubismModelMatrix = new CubismModelMatrix(cubismModel.getCanvasWidth(), cubismModel.getCanvasHeight()); // 省略CubismModel生成处理 CubismModelMatrix cubismModelMatrix; cubismModelMatrix = CubismModelMatrix.create(cubismModel.getCanvasWidth(), cubismModel.getCanvasHeight()); 应用model3.json的Layout可以在model3.json中描述模型编排信息。如果要使用它来设置模型的位置和缩放比例,使用以下任意函数。 Native(C++)的CubismModelMatrix::SetupFromLayout函数Web(TypeScript)的CubismModelMatrix.setupFromLayout函数Java的CubismModelMatrix.setupFromLayout函数 CubismModelSettingJson* model3Json; csmMap layout; model3Json->GetLayoutMap(layout); // 设置模型的编排。 cubismModelMatrix->SetupFromLayout(layout); let model3Json: CubismModelSettingJson; let layout: csmMap model3Json.getLayoutMap(layout); // 设置模型的编排。 cubismModelMatrix.setupFromLayout(layout); CubismModelSettingJson model3Json; Map layout = new HashMap(); model3Json.getLayoutMap(layout); // 设置模型的编排。 cubismModelMatrix.setupFromLayout(layout); 模型显示位置操作在CubismModelMatrix中,您可以以画布各边或中心等作为基准设置座标。 // 置入使模型画布的上边变为参数指定的Y轴座标。它不能与CubismModelMatrix::Bottom()共存,会被之后设置的内容覆盖。 void Top(csmFloat32 y); // 置入使模型画布的下边变为参数指定的Y轴座标。它不能与CubismModelMatrix::Top()共存,会被之后设置的内容覆盖。 void Bottom(csmFloat32 y); // 置入使模型画布的右边(面向画面时的右边)变为参数指定的X轴座标。它不能与CubismModelMatrix::Left()共存,会被之后设置的内容覆盖。 void Right(csmFloat32 x); // 置入使模型画布的左边变为参数指定的X轴座标。它不能与CubismModelMatrix::Right()共存,会被之后设置的内容覆盖。 void Left(csmFloat32 x); // 置入使模型的原点变为参数的座标。作为参数传递的座标被视为世界座标。 void SetPosition(csmFloat32 x, csmFloat32 y); // 置入使模型画布的中心变为参数的座标。作为参数传递的座标被视为世界座标。在调用这个之前,需要设置画布的高度和宽度。 void SetCenterPosition(csmFloat32 x, csmFloat32 y); // 置入使模型画布的Y轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 void CenterX(csmFloat32 x); // 置入使模型画布的X轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 void SetY(csmFloat32 y); // 置入使模型画布的上边变为参数指定的Y轴座标。它不能与CubismModelMatrix::Bottom()共存,会被之后设置的内容覆盖。 public top(csmFloat32 y): void // 置入使模型画布的下边变为参数指定的Y轴座标。它不能与CubismModelMatrix::Top()共存,会被之后设置的内容覆盖。 public bottom(csmFloat32 y): void // 置入使模型画布的右边(面向画面时的右边)变为参数指定的X轴座标。它不能与CubismModelMatrix::Left()共存,会被之后设置的内容覆盖。 public right(csmFloat32 x): void // 置入使模型画布的左边变为参数指定的X轴座标。它不能与CubismModelMatrix::Right()共存,会被之后设置的内容覆盖。 public left(csmFloat32 x): void // 置入使模型的原点变为参数的座标。作为参数传递的座标被视为世界座标。 public setPosition(csmFloat32 x, csmFloat32 y): void // 置入使模型画布的中心变为参数的座标。作为参数传递的座标被视为世界座标。在调用这个之前,需要设置画布的高度和宽度。 public setCenterPosition(csmFloat32 x, csmFloat32 y): void // 置入使模型画布的Y轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 public centerX(csmFloat32 x): void // 置入使模型画布的X轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 public setY(csmFloat32 y): void // 置入使模型画布的上边变为参数指定的Y轴座标。它不能与CubismModelMatrix.bottom()共存,会被之后设置的内容覆盖。 public void top(float y) {...} // 置入使模型画布的下边变为参数指定的Y轴座标。它不能与CubismModelMatrix.top()共存,会被之后设置的内容覆盖。 public void bottom(float y) {...} // 置入使模型画布的右边(面向画面时的右边)变为参数指定的X轴座标。它不能与CubismModelMatrix.left()共存,会被之后设置的内容覆盖。 public void right(float y) {...} // 置入使模型画布的左边(面向画面时的左边)变为参数指定的X轴座标。它不能与CubismModelMatrix.right()共存,会被之后设置的内容覆盖。 public void left(float y) {...} // 置入使模型的原点变为参数的座标。作为参数传递的座标被视为世界座标。 public void setPosition(float x, float y) {...} // 置入使模型画布的中心变为参数的座标。作为参数传递的座标被视为世界座标。在调用这个之前,需要设置画布的高度和宽度。 public void setCenterPosition(float x, float y) {...} // 置入使模型画布的X轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 public void centerX(float x) {...} // 置入使模型画布的X轴变为参数的座标。作为参数传递的座标被视为世界座标。 public void setX(float x) {...} // 置入使模型画布的Y轴中心变为参数的座标。作为参数传递的座标被视为世界座标。 public void centerY(float y) {...} // 置入使模型画布的Y轴变为参数的座标。作为参数传递的座标被视为世界座标。 public void setY(float y) {...} 模型显示尺寸操作CubismModelMatrix允许您在保持模型长宽比的同时操作放大/缩小比例。 // 在保持模型长宽比的同时,将画布的宽度缩放到参数指定的值。 cubismModelMatrix->SetWidth(w); // 在保持模型长宽比的同时,将画布的高度缩放到参数指定的值。 cubismModelMatrix->SetHeight(h); // 在保持模型长宽比的同时,将画布的宽度缩放到参数指定的值。 cubismModelMatrix.setWidth(w); // 在保持模型长宽比的同时,将画布的高度缩放到参数指定的值。 cubismModelMatrix.setHeight(h); // 在保持模型长宽比的同时,将画布的宽度缩放到参数指定的值。 cubismModelMatrix.setWidth(w); // 在保持模型长宽比的同时,将画布的高度缩放到参数指定的值。 cubismModelMatrix.setHeight(h) CubismViewMatrix它是一个继承CubismMatrix44的类。它旨在通过变更相机的位置或缩放等来使用。 Cubism SDK范例根据绘制范围的大小创建一个矩阵。 将CubismViewMatrix中处理的转变矩阵设想为平行投影。 相机移动移动相机(画面)时,使用以下任意函数。 Native(C++)的CubismViewMatrix::AdjustTranslate函数Web(TypeScript)的CubismViewMatrix.adjustTranslate函数Java的CubismViewMatrix.adjustTranslate函数传递给参数的移动量是屏幕座标。 cubismViewMatrix->AdjustTranslate(x, y); cubismViewMatrix.adjustTranslate(x, y); cubismViewMatrix.adjustTranslate(x, y); 相机的放大和缩小使用相机倍率进行缩放时,使用以下任意函数。 Native(C++)的CubismViewMatrix::AdjustScale函数Web(TypeScript)的CubismViewMatrix.adjustScale函数Java的CubismViewMatrix.adjustScale函数以传递给第1个和第2个参数的座标为中心进行缩放。 cubismViewMatrix->AdjustScale(centerX, centerY, scale); cubismViewMatrix.adjustScale(centerX, centerY, scale); cubismViewMatrix.adjustScale(centerX, centerY, scale); 请问这篇文章对您有帮助吗?是否 关于本报道,敬请提出您的意见及要求。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |